package com.yuhs.zixing.study.algorithm.leetcode.easy;

import org.junit.Test;

import javax.swing.*;
import java.util.Arrays;

/**
 * @description: 两数相加
 * 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
 * 请你将两个数相加，并以相同形式返回一个表示和的链表。
 * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 * 示例 1：输入：l1 = [2,4,3], l2 = [5,6,4] 输出：[7,0,8] 解释：342 + 465 = 807.
 * 示例 2：输入：l1 = [0], l2 = [0] 输出：[0]
 * 示例 3：输入：l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出：[8,9,9,9,0,0,0,1]
 * 提示：
 * 每个链表中的节点数在范围 [1, 100] 内
 * 0 <= Node.val <= 9
 * 题目数据保证列表表示的数字不含前导零
 * 相关主题 递归 链表 数学
 * @author: yuhs
 * @date: 2022/5/18
 */
public class E0002_两数相加 {

    @Test
    public void test两数相加() {


        System.out.println("两数相加");
        int[] l1 = {2, 4, 3};
        int[] l2 = {5, 6, 4};
        int[] l3 = solution001(l1, l2);
        Arrays.stream(l3).forEach(System.out::println);
    }

    /**
     * 方案1 for 循环
     *
     * @param l1
     * @param l2
     * @return
     */
    private int[] solution001(int[] l1, int[] l2) {
        int length1 = l1.length;
        int length2 = l2.length;
        int length3 = length1 > length2 ? length1 : length2;
        int[] l3 = new int[length3];

        int tem1;
        int tem2;
        for (int i = 0; i < length3; i++) {
            tem1 = length1 >= i ? l1[i] : 0;
            tem2 = length2 >= i ? l2[i] : 0;
            l3[i] = tem1 + tem2;
        }
        return l3;
    }

}

/**
 * ListNode 数据结结构
 */
class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}